% 定义函数 f(x)
f = @(x) 1./(1 + x.^2);

% 导数 f'(x)
df = @(x) -2*x./(1 + x.^2).^2;

% Theorem 3.57 的插值点
t1 = -6:1:4;

% Corollary 3.58 的插值点
t2 = (-5:1:4) - 0.5;

% 计算插值点上的函数值和导数值
y1 = f(t1);
dy1 = df(t1);
y2 = f(t2);

% Theorem 3.57: Complete Cubic Cardinal B-splines
% 注意：这里简化了实现，具体的 B-spline 构建方式可能需要根据定理进行调整
cs1 = csape(t1, [dy1(1) y1 dy1(end)], 'clamped');

% Corollary 3.58: Quadratic Cardinal B-splines
% 注意：这里简化了实现，具体的 B-spline 构建方式可能需要根据推论进行调整
cs2 = csape(t2, [y2(1) y2 y2(end)], 'second');

% 绘图
x = linspace(-5, 5, 1000);
plot(x, f(x), 'k', 'LineWidth', 2);
hold on;
fnplt(cs1, 'r', 2);
fnplt(cs2, 'b', 2);
legend('Original Function', 'Cubic B-spline (Theorem 3.57)', 'Quadratic B-spline (Corollary 3.58)');
title('B-spline Interpolations');
xlabel('x');
ylabel('f(x)');
hold off;
